﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Microsoft.Practices.Unity;
using Autocentro.BussinesLogic;
using Autocentro.Entities;

namespace Autocentro.UI
{
    public partial class FrmMttProducto : Form
    {
        [Dependency]
        public IProductoBL ProductoBL { get; set; }
        [Dependency]
        public IUnidadMedidaBL UnidaMedidaBL { get; set; }
        bool IsNew = true;

        public FrmMttProducto()
        {
            InitializeComponent();
            this.BuildUp();
            CargarUnidad();
        }

        private void FrmMttProducto_Load(object sender, EventArgs e)
        {

        }

        private void CargarUnidad()
        {
            uNIDAD_MEDIDABindingSource.DataSource = UnidaMedidaBL.GetAllFromUnidaMedidas();
        }

        public PRODUCTO producto { get; set; }

        public void UpdateProducto()
        {
            IsNew = false;
            pRODUCTOBindingSource.DataSource= producto;
        }

        public void AddProducto()
        {
            pRODUCTOBindingSource.AddNew();
            
           
            costoTextBox.Visible = true;
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            var producto = pRODUCTOBindingSource.Current as PRODUCTO;
            
            var msg = "ERROR";
            if (producto!=null)
            {
                producto.Descripcion = descripcionTextBox.Text.ToUpper();

                var cero = Convert.ToDecimal("0.00");
                
                
                            #region AddProducto
                            if (IsNew)
                            {
                                try
                                {
                                    ProductoBL.AddProducto(producto);
                                    MessageBox.Show("Registro Correcto", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Close();
                                }
                                catch (Exception ex)
                                {
                                    msg = ex.Message;
                                    MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            #endregion
                            #region UpdateProducto
                            else
                            {
                                try
                                {
                                    ProductoBL.UpdateProducto(producto);
                                    UpdateProducto();
                                    MessageBox.Show("Modificación Correcta", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                    Close();
                                }
                                catch (Exception ex)
                                {
                                    msg = ex.Message;
                                    MessageBox.Show(msg, "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                }
                            }
                            #endregion
                   
            }
        }

        private void btnAgregarMedida_Click(object sender, EventArgs e)
        {
            var uMedida = new FrmMttUnidadMedida();
            uMedida.AddUnidadMedida();
            uMedida.ShowDialog();
            CargarUnidad();
        }

        private void VerificarDescripcion()
        {
            if (IsNew == true)
            {
                var descripcion = ProductoBL.GetOneProductoByDescripcion(descripcionTextBox.Text);

                if (descripcion != null)
                {
                    PRODUCTO currentProducto = descripcion as PRODUCTO;
                    pRODUCTOBindingSource.DataSource = descripcion;

                    DialogResult rpta = MessageBox.Show(this, string.Format("Ya existe un Producto con la misma descripción"),
                        "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    if (rpta == DialogResult.OK && IsNew == true)
                    {
                        Close();
                    }
                }
                else
                {
                    MessageBox.Show(this, "Descripción disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    costoTextBox.Enabled = true;
                    
                }
            }
            else
            {
                var _producto = pRODUCTOBindingSource.Current as PRODUCTO;
                var existe = ProductoBL.ValidadDuplicidadProductos(descripcionTextBox.Text, _producto.Id);
                if (existe)
                {
                    DialogResult rpta = MessageBox.Show(this, string.Format("Ya existe un Producto con la misma descripción"),
                        "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
                else
                {
                    MessageBox.Show(this, "Descripción disponible", "Mensaje", MessageBoxButtons.OK, MessageBoxIcon.Information);
                }
            }
        }

        private void btnVerificarExistencia_Click(object sender, EventArgs e)
        {
            if (descripcionTextBox.Text.Length > 0)
            {
                VerificarDescripcion();
                costoTextBox.Focus();
            }
            else
            {
                MessageBox.Show(this, "La Descripción es requerida", "Mensaje",MessageBoxButtons.OK, MessageBoxIcon.Information);
                descripcionTextBox.Focus();
            }
        }

        private void descripcionTextBox_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                if (descripcionTextBox.Text.Length > 0)
                {
                    VerificarDescripcion();
                    costoTextBox.Focus();
                }
                else
                {
                    MessageBox.Show(this, "La Descripción es requerida", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    descripcionTextBox.Focus();
                }
            }
        }

        private void descripcionTextBox_PreviewKeyDown(object sender, PreviewKeyDownEventArgs e)
        {
            if (e.KeyCode == Keys.Tab)
            {
                if (descripcionTextBox.Text.Length > 0)
                {
                    VerificarDescripcion();
                }
                else
                {
                    MessageBox.Show(this, "La Descripción es requerida", "Mensaje",
                        MessageBoxButtons.OK, MessageBoxIcon.Information);
                    descripcionTextBox.Focus();
                }
            }
        }

        private void descripcionTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            string cadena = Convert.ToString("-") + Convert.ToString("/") + Convert.ToString(".") + Convert.ToString(",") + (char)8;

            if (Char.IsLetter(e.KeyChar) || cadena.Contains(e.KeyChar) || (char.IsNumber(e.KeyChar)))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }
        
        private void stockTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar)&& Char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void costoTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            var coma = Convert.ToString(",");
            var punto = Convert.ToString(".");

            string cadena = coma + punto;

            if (Char.IsDigit(e.KeyChar) || Char.IsPunctuation(e.KeyChar) || cadena.Contains(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void precioTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (Char.IsDigit(e.KeyChar) || char.IsPunctuation(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsControl(e.KeyChar))
            {
                e.Handled = false;
            }
            else if (Char.IsSeparator(e.KeyChar))
            {
                e.Handled = false;
            }
            else
            {
                e.Handled = true;
            }
        }

        private void descripcionTextBox_Leave(object sender, EventArgs e)
        {
            if (descripcionTextBox.Text.Length > 0)
            {
                VerificarDescripcion();
            }
            else
            {
                MessageBox.Show(this, "La Descripción es requerida", "Mensaje",
                    MessageBoxButtons.OK, MessageBoxIcon.Information);
                descripcionTextBox.Focus();
            }
        }

        
    }
}
